#!/bin/bash  

#获取当前工作目录
CURRENT_DIR=$(pwd)
#日志文件名
LOG_FILE_NAME="$(date +'%Y-%m-%d_%H-%M-%S')_logfile.log"
#创建文件
touch "$LOG_FILE_NAME"
# 定义日志文件路径
LOG_FILE=${CURRENT_DIR}/${LOG_FILE_NAME}
echo "当前工作目录是: $CURRENT_DIR"  >> ${LOG_FILE}
# Shell脚本没有足够的权限 必须root才能执行docker
if [ "$(id -u)" != "0" ]; then
    echo " 此脚本必须以root用户身份运行 " >> ${LOG_FILE}
    exit 1
fi
which git  >> ${LOG_FILE}
git --version >> ${LOG_FILE}
docker --version  >> ${LOG_FILE}
# 检测docker是否在运行 开始
docker_status=$(systemctl is-active docker)

if [ "$docker_status" = "active" ]; then
    echo "Docker 服务正在运行" >> ${LOG_FILE}
else
    echo "Docker 服务没有运行" >> ${LOG_FILE}
fi
# 检测docker是否在运行 结束
echo "-------------------删除容器前 $(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
docker image ls >> ${LOG_FILE}

# 删除容器操作 容器名称或ID 也是后面操作构建的镜像名容器启动名
CONTAINER_NAME="web_vuepress_v2"  
  
# 检查容器是否在运行
function is_container_running {
    local container_name=$1
    docker ps --format '{{.Names}}' | grep -q "^${container_name}$"
}

# 停止并删除容器
function stop_and_remove_container {
    local container_name=$1
    if is_container_running "$container_name"; then
        echo "容器 $container_name 正在运行，将停止并删除它...$(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
        docker stop "$container_name"
        docker rm "$container_name"
        echo "容器 $container_name 已停止并删除。$(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
    else
        # 检查容器是否存在（无论是否运行）
        container_id=$(docker ps -aqf "name=${container_name}")
        if [ -n "$container_id" ]; then
            echo "容器 $container_name 不在运行，但存在，将删除它...$(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
            docker rm "$container_id"
            echo "容器 $container_name 已删除。$(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
        else
            echo "容器 $container_name 不在运行且不存在。$(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
        fi
    fi
}
  
# 调用函数来停止并删除容器  
stop_and_remove_container "$CONTAINER_NAME"

echo "-------------------构建镜像开始 $(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
#dockerfile 必须和脚本在同路径下 docker重复构建会新会覆盖旧
docker build --no-cache -t $CONTAINER_NAME:tag . >> ${LOG_FILE}
echo "-------------------构建镜像结束 $(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
docker image ls >> ${LOG_FILE}
echo "-------------------启动容器前 $(date +'%Y-%m-%d %H:%M:%S')" >> ${LOG_FILE}
#启动容器 容器名 容器内部5200端口映射到物理机5201端口 启动的镜像名也可以是镜像id
docker run -itd --name run_$CONTAINER_NAME -p 5201:5200 $CONTAINER_NAME:tag >> ${LOG_FILE}
